package com.hotel.mvc.controller;


import hbm.Cliente;
import hbm.ClienteDAO;
import hbm.Cuenta;
import hbm.CuentaDAO;
import hbm.Cuentaservicio;
import hbm.CuentaservicioDAO;
import hbm.Habitacion;
import hbm.HabitacionDAO;
import hbm.Hotel;
import hbm.HotelDAO;
import hbm.Servicio;
import hbm.ServicioDAO;
import hbm.Tipohabitacion;
import hbm.TipohabitacionDAO;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class CuentaController extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@SuppressWarnings("unchecked")
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		String opcion = request.getParameter("opcion");

		if(opcion!=null && opcion.equals("asignar")){
			
			List<Cliente> listaClientes = (ArrayList<Cliente>) new ClienteDAO().findAll();
			request.getSession().setAttribute("listaClientes",listaClientes);
			
			List<Hotel> listaHoteles = (ArrayList<Hotel>) new HotelDAO().findAll();
			request.getSession().setAttribute("listaHoteles", listaHoteles);
		
			response.sendRedirect("./jsp/seleccionHotel.jsp");
		}
		
		if(opcion!=null && opcion.equals("filtrar")){
			Integer idCliente = Integer.parseInt(request.getParameter("idCliente"));
			Integer idHotel = Integer.parseInt(request.getParameter("idHotel"));
			List<Habitacion>listaHabitacionesPorHotel= (ArrayList<Habitacion>)new HabitacionDAO().findByHotelIdHotel(idHotel);
			
			List<Tipohabitacion>listaTipoHabitacion= (ArrayList<Tipohabitacion>)new TipohabitacionDAO().findAll();
			
			Cliente clienteSeleccionado = new ClienteDAO().findById(idCliente);
			Hotel hotelSeleccionado = new HotelDAO().findById(idHotel);
			List<Habitacion>listaHabitacionesDisponibles= new ArrayList<Habitacion>();
			
			HashMap tipos = new HashMap();
			for(Tipohabitacion tipo: listaTipoHabitacion){
				tipos.put(tipo.getIdTipoHabitacion(), tipo.getDescripcion());
			}
			
			for(Habitacion habitacion:listaHabitacionesPorHotel){
				if((habitacion.getEstado()==null) ||(habitacion.getEstado()==0)){
					listaHabitacionesDisponibles.add(habitacion);
				}
			}
			
			request.getSession().setAttribute("idClienteSeleccionado",clienteSeleccionado.getIdCliente());
			request.getSession().setAttribute("nombreClienteSeleccionado",clienteSeleccionado.getNombreCliente());
			request.getSession().setAttribute("idHotelSeleccionado",hotelSeleccionado.getIdHotel());
			request.getSession().setAttribute("direccionHotelSeleccionado",hotelSeleccionado.getDireccionHotel());
			request.getSession().setAttribute("telefonoHotelSeleccionado",hotelSeleccionado.getTelefonoHotel());
			request.getSession().setAttribute("listaHabitacionesDisponibles", listaHabitacionesDisponibles);
			
			request.getSession().setAttribute("listaTipoHabitacion", tipos);
			
			response.sendRedirect("./jsp/asignarHabitacion.jsp");
		}
		
		if(opcion!=null && opcion.equals("habitacion")){
			String boton = request.getParameter("boton");
			if(boton!=null && boton.equals("Asignar")){
				Integer idCliente = Integer.parseInt(request.getParameter("idCliente"));
				Integer idHabitacion = Integer.parseInt(request.getParameter("idHabitacion"));
				String  fechaLlegada = request.getParameter("fecha_c");
			
				SimpleDateFormat dtTmp = new SimpleDateFormat("yyyy-MM-dd");
				Date fecha;
				try {
					fecha = dtTmp.parse(fechaLlegada);
					Cuenta cuenta = new Cuenta(idCliente,fecha);
			        Session session = new CuentaDAO().getSession();
					Transaction tx = session.beginTransaction();
					session.save(cuenta);
					tx.commit();
					
					System.out.println("Id Cuenta : "+cuenta.getIdCuenta());
					
					Habitacion habitacion = new HabitacionDAO().findById(idHabitacion);
					habitacion.setCuentaIdCuenta(cuenta.getIdCuenta());
					habitacion.setEstado(1);
					Transaction tx1 = session.beginTransaction();
					session.save(habitacion);
					tx1.commit();
					session.close();
					
					
				} catch (ParseException e) {
					e.printStackTrace();
					response.sendRedirect("./index.jsp");
				}
				response.sendRedirect("./index.jsp");
		        
			}
		}
	
	if(opcion!=null && opcion.equals("asignarServicio")){
		
		List<Cuenta> listaCuentas = (ArrayList<Cuenta>) new CuentaDAO().findAll();
		request.getSession().setAttribute("listaCuentas",listaCuentas);
		
		List<Cliente> listaClientes = (ArrayList<Cliente>) new ClienteDAO().findAll();
		HashMap clientes = new HashMap();
		for(Cliente cliente: listaClientes){
			clientes.put(cliente.getIdCliente(), cliente.getNombreCliente());
		}
		request.getSession().setAttribute("listaClientes",clientes);
		
		response.sendRedirect("./jsp/seleccionCuenta.jsp");
	}	
	
	if(opcion!=null && opcion.equals("filtrarServicio")){
		String idCuenta = request.getParameter("idCuenta");
		String[] arregloIds = idCuenta.split(",");
		Integer idCuentaSeleccionada= Integer.parseInt(arregloIds[0]);
		Integer idClienteSeleccionado= Integer.parseInt(arregloIds[1]);
		
		List<Servicio>listaServicios= (ArrayList<Servicio>)new ServicioDAO().findAll();
		
		Cuenta cuentaSeleccionada = new CuentaDAO().findById(idCuentaSeleccionada);
		Cliente clienteSeleccionado = new ClienteDAO().findById(idClienteSeleccionado);
					
		request.getSession().setAttribute("idCuentaSeleccionada",cuentaSeleccionada.getIdCuenta());
		request.getSession().setAttribute("nombreClienteSeleccionado",clienteSeleccionado.getNombreCliente());
		request.getSession().setAttribute("nitClienteSeleccionado",clienteSeleccionado.getNitCliente());	
		request.getSession().setAttribute("listaServicios", listaServicios);
		
		response.sendRedirect("./jsp/asignarServicio.jsp");
	}
	
	if(opcion!=null && opcion.equals("servicio")){
		String boton = request.getParameter("boton");
		if(boton!=null && boton.equals("Asignar")){
			Integer idCuenta = Integer.parseInt(request.getParameter("idCuenta"));
			Integer idServicio = Integer.parseInt(request.getParameter("idServicio"));
		
				Cuentaservicio servicio = new Cuentaservicio(idCuenta,idServicio);
		        Session session = new CuentaservicioDAO().getSession();
				Transaction tx = session.beginTransaction();
				session.save(servicio);
				tx.commit();
				session.close();
				
			response.sendRedirect("./index.jsp");
	        
		}
	}
	}

}
